package model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 
 * @author Alle
 *
 */

@Entity
@Table(name="Mellemvarer")
public class Mellemvare {
	@Id
	private int id;
	private int antalStk;
	
	@ManyToOne(cascade=CascadeType.ALL)
	private ProduktType produktType;
	
	@OneToOne(cascade=CascadeType.ALL)
	private LagerPlads lagerPlads;
	
	@OneToMany(mappedBy="mellemvare", cascade=CascadeType.ALL)
	private List<TimeStamp> timeStamps = new ArrayList<TimeStamp>();
	
	@ManyToOne(cascade=CascadeType.ALL)
	private Behandling behandling;
	
	public Mellemvare() {
		// JPA
	}
	
	public Mellemvare(int id, int antalStk, ProduktType produktType){
		this.antalStk = antalStk;
		this.setId(id);
		this.setProduktType(produktType);
	}
	
	public Behandling getBehandling() {
		return this.behandling;
	}
	
	public ProduktType getProduktType(){
		return this.produktType;
	}
	
	public void setBehandling(Behandling behandling){
		setBehandlingUD(behandling);
		behandling.setMellemVareUD(this);
	}
	
	protected void setBehandlingUD(Behandling behandling){
		this.behandling = behandling;
	}
	
	public void removeBehandling() {
		this.behandling.removeMellemvareUD();
		this.removeBehandlingUD();
	}
	
	protected void removeBehandlingUD() {
		this.behandling = null;
	}
	
	public void setProduktType(ProduktType produktType){
		setProduktTypeUD(produktType);
		produktType.addMellemvareUD(this);
	}
	
	protected void setProduktTypeUD(ProduktType produktType){
		this.produktType = produktType;
	}
	

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}
	
	public int getAntalStk() {
		return antalStk;
	}
	
	public void setAntalStk(int antalStk) {
		this.antalStk = antalStk;
	}
	
	public List<TimeStamp> getTimeStamps(){
		return timeStamps;
	}

	public void setLagerPlads(LagerPlads lagerPlads) {
		this.setLagerPladsUD(lagerPlads);
		lagerPlads.setMellemvareUD(this);
	}
	
	protected void setLagerPladsUD(LagerPlads lagerPlads) {
		this.lagerPlads = lagerPlads;
	}

	public LagerPlads getLagerPlads() {
		return lagerPlads;
	}
	
	public void removeLagerPlads(){
		this.lagerPlads.removeMellemvareUD();
		removeLagerPladsUD();
	}
	
	protected void removeLagerPladsUD(){
		this.lagerPlads= null;
	}
	
	protected void addTimeStampUD(TimeStamp timestamp){
		timeStamps.add(timestamp);
	}
	
	protected void removeTimeStampUD(TimeStamp timestamp){
		timeStamps.remove(timestamp);
	}
	
	public void addTimeStamp(TimeStamp timestamp){
		this.addTimeStampUD(timestamp);
		timestamp.setMellemvareUD(this);
	}
	
	public void removeTimeStamp(TimeStamp timestamp){
		timestamp.setMellemvareUD(null);
		this.removeTimeStampUD(timestamp);
	}

	public TimeStamp getNewestTimeStamp() {
		return this.getTimeStamps().get(this.getTimeStamps().size()-1);
	}
}
